package main

import (
	"encoding/json"

	"jlpay-sdk-go/pkg/jlpay/demo"
	"jlpay-sdk-go/pkg/jlpay/models/openmerch/change"
	changeService "jlpay-sdk-go/pkg/jlpay/services/openmerch/change"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// 签约信息修改示例
func signInfoModifyDemo(changeService *changeService.ChangeService) {
	utils.Info("开始执行签约信息修改示例")

	// 创建签约信息修改请求
	request := change.NewSignInfoModifyRequest()

	// 设置请求参数 - 根据Python SignInfoModifyRequest中的字段定义
	request.SetOrgNo("50720711")                                 // 机构号
	request.SetMerchNo("849584358140108")                        // 商户号
	request.SetApplyID("b8659ea518d14c99b78b5ad000a0810D")       // 申请单号
	request.SetSignMode("1")                                     // 签约方式
	request.SetAgreementPic("https://example.com/agreement.jpg") // 纸质协议照片
	request.SetLegalPersonPhone("13800138000")                   // 法人签约手机号码
	request.SetDelegateePhone("13800138001")                     // 授权收款人签约手机号码

	// 序列化请求数据并打印
	requestMap, err := request.ToMap()
	if err != nil {
		utils.Errorf("请求数据转换失败: %v", err)
		return
	}
	requestJSON, _ := json.Marshal(requestMap)
	utils.Debugf("签约信息修改请求数据: %s", string(requestJSON))

	// 发送请求
	response, err := changeService.ModifySignInfo(request)
	if err != nil {
		utils.Errorf("签约信息修改请求失败: %v", err)
		return
	}

	// 处理响应 - 使用BaseResponse接口的HandleResponse方法
	response.HandleResponse("签约信息修改")

	utils.Info("签约信息修改示例执行完毕")
}

func main() {
	// 设置日志级别为info，显示详细的调试信息
	utils.SetLogLevel("info")

	utils.Info("==================================================")
	utils.Info("===== 签约信息修改示例 开始 =====")
	utils.Info("==================================================")

	// 创建配置对象和变更服务
	config := demo.CreateDemoConfig()
	changeService := changeService.NewChangeService(config)

	signInfoModifyDemo(changeService)

	utils.Info("==================================================")
	utils.Info("===== 签约信息修改示例执行完毕 =====")
	utils.Info("==================================================")
}
